.. _cmmOverrideSpeedSetAll: cmmOverrideSpeedSetAll ========================== -------------------------- SYNOPSIS ``````````` .. code-block:: none VT_I4 cmmOverrideSpeedSetAll( [in] VT_I4 NumAxes, [in] VT_PI4 AxisList ) DESCRIPTION ````````````` - 이 함수는 cmmOverrideSpeedSet()과 같이 각 축의 속도를 오버라이딩하는 함수이지만 여러 축을 동시에 오버라이딩할 수 있다는 것이 차이점입니다. PARAMETER ``````````` - nNumAxes : 동시에 작업을 수행할 대상 축의 수 \ - AxisList : 동시에 작업을 수행할 대상 축의 배열 주소값. 이 배열의 크기는 NumAxes 값과 일치해야 합니다. RETURN VALUE ````````````` +--------------+-----------+ | Value | Meaning | +==============+===========+ | 음수 | 수행 실패 | +--------------+-----------+ | cmERR_NONE | 수행 성공 | +--------------+-----------+ EXAMPLE ````````` - 본 예제는 cmmOverrideSpeedSetAll()함수를 사용하여 속도를 오버라이딩하는 것을 예로 보여주는 코드입니다. 본 예제는 “HIGH” 와 “LOW” 로 이름지어진 두 개의 버튼이 있다고 가정하고 “HIGH” 버튼이 눌리면 X1 축과 Y1 축의 속도를 20000 으로 설정하고 “LOW” 버튼이 눌리면 속도를 10000 으로 설정하는 예입니다. .. code-block:: c++ :linenos: :emphasize-lines: 5 C/C++ #include "Cmmsdk.h" #include "CmmsdkDef.h" #define V_LOW 10000 // 저속모드 속도 #define V_HIGH 20000 // 고속모드 속도 #define N_AXES 2 // 2 축 int nAxisList[N_AXES]={cmX1, cmY1}; int nDirList[N_AXES]={cmDIR_P, cmDIR_P}; /*************************************************************** * OnProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이 * 적용되는 부분을 의미합니다. ***************************************************************/ void OnProgramInitial() { long m_nNumAexs; cmmLoadDll(); if(cmmGnDeviceLoad(cmTRUE, &m_nNumAxes) != cmERR_NONE) { //Handle 은 사용자가 생성한 폼의 핸들 값입니다. cmmErrShowLast(Handle); return; } } /************************************************************** * OnStart() : 이 함수는 가상의 함수로서 X 축에 대하여 * V-MOVE 모션을 시작합니다. **************************************************************/ void OnStart() { long nIsDone; // 해당축이 작업중이면 정지(停止)하고 다시 시작 // cmmSxIsDone(cmX1, &nIsDone); if(nIsDone != cmTRUE) cmmSxStopEmg(cmX1); cmmSxIsDone(cmY1, &nIsDone); if(nIsDone != cmTRUE) cmmSxStopEmg(cmY1); // 속도설정 => 시작은 LOW 속도로 시작 // cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, V_LOW, 50000, 50000); cmmCfgSetSpeedPattern(cmY1, cmSMODE_S, V_LOW, 50000, 50000); // V-Move start (X & Y)// if(!cmmMxVMoveStart(N_AXES, nAxisList, nDirList)){ cmmErrShowLast(Handle); return; } } /************************************************************** * OnHighButtonClick() : “HIGH” 버튼 콜백함수 (가상함수) * “HIGH”버튼이 클릭되면 속도를 V_HIGH 속도로 오버라이드한다. **************************************************************/ void OnHighButtonClick() { // V_HIGH 속도로 오버라이딩 // cmmSxSetSpeedRatio(cmX1, cmSMODE_S, 200, 100, 100); cmmSxSetSpeedRatio(cmY1, cmSMODE_S, 200, 100, 100); //아래 코드로 대체가 가능합니다. //cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, V_HIGH, 50000, 50000); //cmmCfgSetSpeedPattern(cmY1, cmSMODE_S, V_HIGH, 50000, 50000); // if(cmmOverrideSpeedSetAll (N_AXES, nAxisList) != cmERR_NONE){ cmmErrShowLast(Handle); } } /************************************************************** * OnLowButtonClick() : “LOW” 버튼 콜백함수 (가상함수) * “LOW”버튼이 클릭되면 속도를 V_LOW 속도로 오버라이드한다. **************************************************************/ void OnLowButtonClick() { // V_LOW 속도로 오버라이딩 // cmmSxSetSpeedRatio(cmX1, cmSMODE_S, 100, 100, 100); cmmSxSetSpeedRatio(cmY1, cmSMODE_S, 100, 100, 100); //아래 코드로 대체가 가능합니다. //cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, V_LOW, 50000, 50000); //cmmCfgSetSpeedPattern(cmY1, cmSMODE_S, V_LOW, 50000, 50000); // if(cmmOverrideSpeedSetAll (N_AXES, nAxisList) != cmERR_NONE){ cmmErrShowLast(Handle); } } /************************************************************** * OnStop() : “Stop”명령시에 호출되는 가상의 함수 **************************************************************/ void OnStop() { cmmMxStopEmg(N_AXES, nAxisList); } .. code-block:: none :linenos: Visual Basic '/************************************************************** '* OnStart() : 이 함수는 가상의 함수로서 X 축에 대하여 '* V-MOVE 모션을 시작합니다. '**************************************************************/ Private Sub OnStart() Dim nIsDone As Long '해당축이 작업중이면 정지(停止)하고 다시 시작 Call cmmSxIsDone(cmX1, nIsDone) If nIsDone <> cmTRUE Then Call cmmSxStopEmg(cmX1) End If Call cmmSxIsDone(cmY1, nIsDone) If nIsDone <> cmTRUE Then Call cmmSxStopEmg(cmY1) End If '시작은 LOW 속도로 시작 Call cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, 10000, 50000, 50000) Call cmmCfgSetSpeedPattern(cmY1, cmSMODE_S, 10000, 50000, 50000) 'V-Move Start ( X, Y ) If (Not (cmmMxVMoveStart(2, nAxisList(0), nDirList(0)))) Then Call cmmErrShowLast(thisform.Hwnd) End If End Sub '/************************************************************** '* OnHighButtonClick() : "HIGH" 버튼 콜백함수 (가상함수) '* "HIGH"버튼이 클릭되면 속도를 V_HIGH 속도로 오버라이드한다. '**************************************************************/ Private Sub OnHighButtonClick() '// V_HIGH 속도로 오버라이딩 // Call cmmSxSetSpeedRatio(cmX1, cmSMODE_S, 200, 100, 100) Call cmmSxSetSpeedRatio(cmY1, cmSMODE_S, 200, 100, 100) '//아래 코드로 대체가 가능합니다. '//Call cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, 20000, 50000, 50000) '//Call cmmCfgSetSpeedPattern(cmY1, cmSMODE_S, 20000, 50000, 50000) '// If cmmOverrideSpeedSetAll(2, nAxisList(0)) <> cmERR_NONE Then Call cmmErrShowLast(thisform.Hwnd) End If End Sub '/************************************************************** '* OnLowButtonClick() : "LOW" 버튼 콜백함수 (가상함수) '* "LOW"버튼이 클릭되면 속도를 V_LOW 속도로 오버라이드한다. '**************************************************************/ Private Sub OnLowButtonClick() '// V_LOW 속도로 오버라이딩 // Call cmmSxSetSpeedRatio(cmX1, cmSMODE_S, 100, 100, 100) Call cmmSxSetSpeedRatio(cmY1, cmSMODE_S, 100, 100, 100) '//아래 코드로 대체가 가능합니다. '//Call cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, 10000, 50000, 50000) '//Call cmmCfgSetSpeedPattern(cmY1, cmSMODE_S, 10000, 50000, 50000) '// If cmmOverrideSpeedSetAll(2, nAxisList(0)) <> cmERR_NONE Then Call cmmErrShowLast(thisform.Hwnd) End If End Sub .. code-block:: none :linenos: Delphi Const V_LOW = 10000; // 저속모드 속도 Const V_HIGH = 20000; // 고속모드 속도 Const N_AXES = 2; // 2 축 Const Handle = 1; var nAxisList : Array[0..2] of LongInt; nDirList : Array[0..2] of LongInt; //*************************************************************** // OnProgramInitial : 이 함수는 가상의 함수로서 프로그램 초기화 루틴이 // 적용되는 부분을 의미합니다. //***************************************************************/ procedure OnProgramInitial(); var m_nNumAxes : LongInt; begin if(cmmGnDeviceLoad(cmTRUE, @m_nNumAxes) <> cmERR_NONE) then begin //Handle 은 사용자가 생성한 폼의 핸들 값입니다. cmmErrShowLast(Handle); exit; end; end; //************************************************************** // OnStart() : 이 함수는 가상의 함수로서 X 축에 대하여 // V-MOVE 모션을 시작합니다. //**************************************************************/ procedure OnStart(); var nIsDone : LongInt; begin // 해당축이 작업중이면 정지(停止)하고 다시 시작 // cmmSxIsDone(cmX1, @nIsDone); if(nIsDone <> cmTRUE) then begin cmmSxStopEmg(cmX1); end; cmmSxIsDone(cmY1, @nIsDone); if(nIsDone <> cmTRUE) then begin cmmSxStopEmg(cmY1); end; // 속도설정 => 시작은 LOW 속도로 시작 // cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, V_LOW, 50000, 50000); cmmCfgSetSpeedPattern(cmY1, cmSMODE_S, V_LOW, 50000, 50000); // V-Move start (X & Y)// if(cmmMxVMoveStart(N_AXES, @nAxisList, @nDirList)<>cmFALSE)then begin cmmErrShowLast(Handle); exit; end; end; //************************************************************** //OnHighButtonClick() : "HIGH" 버튼 콜백함수 (가상함수) //"HIGH"버튼이 클릭되면 속도를 V_HIGH 속도로 오버라이드한다. //**************************************************************/ procedure OnHighButtonClick(); begin // V_HIGH 속도로 오버라이딩 // cmmSxSetSpeedRatio(cmX1, cmSMODE_S, 200, 100, 100); cmmSxSetSpeedRatio(cmY1, cmSMODE_S, 200, 100, 100); //아래 코드로 대체가 가능합니다. //cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, V_HIGH, 50000, 50000); //cmmCfgSetSpeedPattern(cmY1, cmSMODE_S, V_HIGH, 50000, 50000); if(cmmOverrideSpeedSetAll (N_AXES, @nAxisList) <> cmERR_NONE)then begin cmmErrShowLast(Handle); end; end; //************************************************************** //OnLowButtonClick() : "LOW" 버튼 콜백함수 (가상함수) //"LOW"버튼이 클릭되면 속도를 V_LOW 속도로 오버라이드한다. //**************************************************************/ procedure OnLowButtonClick(); begin // V_LOW 속도로 오버라이딩 // cmmSxSetSpeedRatio(cmX1, cmSMODE_S, 100, 100, 100); cmmSxSetSpeedRatio(cmY1, cmSMODE_S, 100, 100, 100); //아래 코드로 대체가 가능합니다. //cmmCfgSetSpeedPattern(cmX1, cmSMODE_S, V_LOW, 50000, 50000); //cmmCfgSetSpeedPattern(cmY1, cmSMODE_S, V_LOW, 50000, 50000); if(cmmOverrideSpeedSetAll (N_AXES, @nAxisList) <> cmERR_NONE) then begin cmmErrShowLast(Handle); end; end; //************************************************************** // OnStop() : "Stop"명령시에 호출되는 가상의 함수 //**************************************************************/ procedure OnStop(); begin cmmMxStopEmg(N_AXES, @nAxisList); end;